# プロジェクト3 フォトレジスタセンサー ![](./media/image-20250902173047302.png) **説明** フォトレジスタは、CdSやセレン化合物などの半導体材料で作られた特殊な抵抗です。表面は防湿樹脂でコーティングされており、光導電効果を持っています。周囲の光に敏感で、その抵抗値は異なる光の強度によって変わります。 フォトレジスタの特性を利用して回路を設計し、フォトレジスタモジュールを生成します。 フォトセルモジュールの信号ピンをアナログポートに接続すると、光の強度が強いほどアナログポートの電圧が大きくなり、アナログ値も大きくなることがわかります。 逆に、光の強度が弱いほどアナログポートの電圧が小さくなり、アナログ値も小さくなります。 これに基づいて、フォトセルモジュールを使用してアナログ値を読み取り、周囲の光の強度を取得することができます。 **仕様** ![](./media/image-20250902173349950.png) - 抵抗値:5K ohm~0.5Mohm - インターフェースタイプ:アナログ - 動作電圧:3.3V~5V - 簡単な取り付け:ネジ固定穴付き - ピン間隔:2.54mm **部品** ![](./media/image-20250902173528860.png) **接続図:** ![](./media/image-20250902173558747.png) 2つのフォトレジスタセンサーはA1とA2に接続されており、A1に接続されたフォトレジスタを通じて実験を完了します。そのアナログ値を読み取ってみましょう。 **テストコード** ```c /* keyestudio Mini Tank Robot V2.1 lesson 3.1 photocell http://www.keyestudio.com */ int sensorPin = A1; // フォトセルの入力ピンを選択 int sensorValue = 0; // センサーから来た値を格納する変数 void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(sensorPin); // センサーから値を読み取る Serial.println(sensorValue); // シリアルポートに抵抗値を出力 delay(500); } //****************************************************** ``` **テスト結果** 開発ボードにコードをアップロードし、シリアルモニターを開いて、フォトレジスタを覆うと値が減少し、覆わないと値が増加することを確認します。 ![](./media/image-20250902174159923.png) **コード説明** **analogRead(sensorPin):** アナログポート経由でフォトレジスタのアナログ値を読み取ります。 **Serial.begin(9600):** シリアルポートを初期化し、シリアル通信のボーレートは9600です。 **Serial.println** :シリアルポートに出力して改行します。 **応用練習** フォトレジスタの値を読み取る方法を学びました。次に、フォトレジスタとLEDを組み合わせて、LEDの状態を確認してみましょう。 ![](./media/image-20250902174256941.png) PWMは明るさを制御するため、LEDはPWMピンに接続されます。LEDをピン10に接続し、フォトレジスタのピンは変更せずに、次のようにコードを設計します: ```c /*keyestudio Mini Tank Robot V2.1 lesson 3.2 photocell-analog output http://www.keyestudio.com */ int analogInPin = A1; // フォトセルが接続されているアナログ入力ピン int analogOutPin = 10; // LEDが接続されているアナログ出力ピン int sensorValue = 0; // ポテンショメータから読み取った値 int outputValue = 0; // PWM(アナログ出力)に出力する値 void setup() { Serial.begin(9600); } void loop() { // アナログ入力値を読み取る: sensorValue = analogRead(analogInPin); // アナログ出力の範囲にマッピングする: outputValue = map(sensorValue, 0, 1023, 0, 255); // アナログ出力値を変更する: analogWrite(analogOutPin, outputValue); // 最後の読み取り後、アナログ-デジタル変換器が安定するまで // 2ミリ秒待機する: Serial.println(sensorValue); // シリアルポートにフォトレジスタの値を出力 delay(2); } //*************************************************************** ``` コードをアップロードし、手で押さえてLEDの明るさを観察します。